package com.avicsafety.ezsystem.local_stoage;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.Date;
import java.util.SortedMap;

import io.reactivex.annotations.NonNull;

/**
 * Description:本地存储model
 * Create by shili at 2018/8/1-13:19
 */
public class LocalData {

    /**
     * 主键 这个有可能是guid 也有可能是long 型 但是都以String 形式存储
     */
    private String id;

    /**
     * 名字 这个名字可以对应服务器端的表明
     */
    private String name;


    /**
     * 数据 这里建议存储整个json数据
     */
    private String data;

    /**
     * 排序123 涉及到查询时候 的列表顺序
     */
    private String sort1;
    private String sort2;
    private String sort3;


    /**
     * 构造函数
     * @param id 主键
     * @param name 表名
     * @param data 数据
     * @param sort1 条件1
     * @param sort2 条件2
     * @param sort3 条件3
     */
    public LocalData(@NonNull String id,@NonNull String name, String data, String sort1, String sort2, String sort3) {
        this.id = id;
        this.name = name;
        this.data = data;
        this.sort1 = sort1;
        this.sort2 = sort2;
        this.sort3 = sort3;
    }

    /**
     * 默认空的的数据
     */
    public LocalData(){

    }

    /**
     * 构造函数
     * @param id 主键
     * @param name 表名 对应服务器端 可以看做是分类
     * @param data JSON数据
     */
    public LocalData(@NonNull String name,@NonNull String id,String data) {
        this.id = id;
        this.name = name;
        this.data = data;
    }

    /**
     * 构造函数
     * @param id 主键
     * @param name 表名 对应服务器端 可以看做是分类
     * @param sorts 排序数组
     * @param data JSON数据
     */
    public LocalData(@NonNull String name, @NonNull String id, String data, String[] sorts) {
        this.id = id;
        this.name = name;
        this.data = data;

        if(sorts!=null&&sorts.length==1){
            this.sort1=sorts[0];
        }
        if(sorts!=null&&sorts.length==2){
            this.sort1=sorts[1];
        }
        if(sorts!=null&&sorts.length==3){
            this.sort1=sorts[2];
        }
    }

    @Override
    public String toString() {
        return "LocalData{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", data='" + data + '\'' +
                ", sort1='" + sort1 + '\'' +
                ", sort1='" + sort2 + '\'' +
                ", sort1='" + sort3 + '\'' +
                '}';
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    public String getStringValue(String key){
        return getStringValue(key,"");
    }

    public String getSort1() {
        return sort1;
    }

    public void setSort1(String sort1) {
        this.sort1 = sort1;
    }

    public String getSort2() {
        return sort2;
    }

    public void setSort2(String sort2) {
        this.sort2 = sort2;
    }

    public String getSort3() {
        return sort3;
    }

    public void setSort3(String sort3) {
        this.sort3 = sort3;
    }

    public String getStringValue(String key, String _default){
        String data = getData();
        //转换成JSON
        try {
            JSONObject obj = new JSONObject(data);
            if(obj.has(key)){
                return obj.isNull(key)?_default:obj.getString(key);
            }else{
                return _default;
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return _default;
    }

    public Long getLongValue(String key, Long _default){
        String data = getData();
        //转换成JSON
        try {
            JSONObject obj = new JSONObject(data);
            if(obj.has(key)){
                return obj.isNull(key)?_default:obj.getLong(key);
            }else{
                return _default;
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return _default;
    }

    public Boolean getBooleanValue(String key, Boolean _default){
        String data = getData();
        //转换成JSON
        try {
            JSONObject obj = new JSONObject(data);
            if(obj.has(key)){
                return obj.isNull(key)?_default:obj.getBoolean(key);
            }else{
                return _default;
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return _default;
    }

}
